package br.com.localfloripa.controllers;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;

import br.com.localfloripa.dao.MensagemDao;
import br.com.localfloripa.entities.Mensagem;

@Named("mensagemController")
@Scope("session")
public class MensagemController implements Serializable{

	private static final long serialVersionUID = 7671513181283318608L;
	private static final Logger log = LoggerFactory.getLogger(MensagemController.class);
	private final Integer pageSize = 10;
	
	@Inject
	@Named("mensagemDao")
	private MensagemDao mensagemDao;
	
	private LazyDataModel<Mensagem> lazyModelMensagem;
	private Mensagem mensagem;
	
	@PostConstruct
	public void loadModels() {
		lazyModelMensagem = new LazyDataModel<Mensagem>() {

			@Override
			public int getPageSize() {
				return pageSize;
			}

			@Override
			public int getRowCount() {
				try {
					return mensagemDao.countListMensagens().intValue();
				} catch (Exception e) {
					log.error(e.getMessage(),e);
					return 0;
				}
			}

			@Override
			public List<Mensagem> load(int first, int pageSize, String sortField, SortOrder order, Map<String, String> filters) {
				List<Mensagem> mensagens = null;
				try {
					mensagens = mensagemDao.listMensagensPaginada(first, pageSize);
				} catch (Exception e) {
					log.error(e.getMessage(),e);
				}				
				return mensagens;
			}			
		};
	}

	public LazyDataModel<Mensagem> getLazyModelMensagem() {
		return lazyModelMensagem;
	}

	public void setLazyModelMensagem(LazyDataModel<Mensagem> lazyModelMensagem) {
		this.lazyModelMensagem = lazyModelMensagem;
	}

	public Mensagem getMensagem() {
		return mensagem;
	}

	public void setMensagem(Mensagem mensagem) {
		this.mensagem = mensagem;
	}

	public Integer getPageSize() {
		return pageSize;
	}
	
}
